/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.marcelo.agro.core.api;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import org.marcelo.agro.entidades.*;


/**
 *
 * @author marcelo
 * IActividades ofrece todos los servicios que se deben implementar para poder realizar las manipulaciones en la 
 * base de datos, permite desacoplar la aplicacion, todos los modulos que pretendar prestar servicios deben implementar esta interface
 * En las capas superiores se invoca a esta interfaz y se llaman a sus metodos para realizar las consultas o modificaciones
 * que correspondan
 * 
 * @since 1.0
 */
public interface IActividades  extends IAccesoADatos<Actividades> {
    
    /**
     * El campo String para los mensajes de error en las consultas
     */
   
    
    /**
     * La superficie maxima de aplicacion de una actividad no puede ser mayor
     * a la maxima superficie de un lote
     */
    public static BigDecimal SUPERFICIE_MAX= ILotes.MAX_VALUE;
    
    /**
     * La dosis maxima se limita a 5 digitos y dos decimales
     */
    public static BigDecimal DOSIS_MAX= new BigDecimal("99999.99");
    
    /**
     * El precio maximo no puede superar 10 digitos y 2 decimales
     */
    public static BigDecimal PRECIO_MAX= new BigDecimal("9999999999.99");
    
    /**
     * Retorna el maximo valor de superficie para la instancia
     * @return 
     */
    public BigDecimal getSuperficieMax();
    
    /**
     * Retorna el maximo valor de dosis para la instancia
     * @return 
     */
    public BigDecimal getDosisMax();
    
    /**
     * Retorna el maximo valor de Precio permitido para la instancia
     * @return 
     */
    public BigDecimal getPrecioMax();
        
    /**
     * Metodos para obtener la lista de actividades realizadas para una campaña dada
     * @param lpc un LotesPorCampaña
     * @return la lista de actividades para los datos o NULL en caso de error
     */
    public List<Actividades> getActividades(LotesPorCampana lpc) ;
    
    
    /**
     * Metodo para obtener la lista de actividades para una campania
     * @param lpc
     * @return 
     */
    public List<Actividades> getActividades(Campanas campania) ;
    
    /**
     * Busca todas las actividades que coninciden con el parametro pasado
     * @param actividad
     * @return 
     */
    
    public List<Productos>  getProductos() ;
    
    /**
     * Metodo para buscar datos filtrados por tipoActividad y TipoProducto
     * @param 
     * @param 
     * @return Una lista de Actividades o null en caso que la lista esta vacia o 
     */
    
        
    public List<Actividades> getActividades(TipoActividad tipoActividad, TipoProducto tipoProducto);
    
    /**
     * MEtodo para borrar un elemento
     */
    
    public void delete(Actividades object) throws Exception;
    
   
}
